import os
import time

def createFile(test):
    os.system("touch temp")
    f = file("temp", 'w')
    f.write(test)
    f.close()

def destroyFile():
    os.system("rm temp")

def test(test, expect):
    createFile(test)
    r = os.popen("./tito temp")
    result = r.read().rstrip("\n")
    f = file("testLog", 'a')
    f.write(time.strftime("%x-%X:\n"))
    if result == (expect):
        ##print("Success")
        f.write("Success:\n\tTest: %s\n\tResult: %s\n\n" % (test, result))
    else:
        print("Failure in %s: expected %s but got %s" % (test, expect, result))
        f.write("Failure:\n\tTest: %s expected %s but got %s\n\n" % (test, expect, result))
    destroyFile()
    f.close()

test("(+ 3 (* 4 5))", "23")
test("(+ 1 (- 1 1) 2 3 (* 2 3) (/ 50 10))", "17")
test("(mod 10 5)", "0")
test("(mod 5 10)", "5")
test("(quotient 10 5)", "2")
test("(quotient 1 1)", "1")
test("(quotient 40 4380)", "0")
test("(remainder 13 4)", "1")
test("(remainder 200 9)", "2")
test("(remainder 0 4)", "0")
test("(< 1 2)" ,"#t")
test("(< 2 1)" , "#f")
test("(> 500 2)", "#t")
test("(> 1 1)", "#f")
test("(= 0 0)", "#t")
test("(<= 1 1)", "#t")
test("(>= 3 5)", "#f")
test("(/= 1 1)", "#f")
test("(head '(1 2 3))", "1")
test("(head '(\"cabeza\" 4 90))", "\"cabeza\"")
test("(tail '(1 2 3 4 5))", "(2 3 4 5)")
test("(tail '(1))", "()")
test("(string=? \"hello\" \"hello\")", "#t")
test("(string=? \"hello\" \"bye\")", "#f")
test("(string<? \"hello\" \"hello\")", "#f")
test("(string<? \"hello\" \"zello\")", "#t")
test("(string>? \"hello\" \"hello\")", "#f")
test("(string>? \"hello\" \"ahllo\")", "#t")
test("(string<=? \"hello\" \"hello\")", "#t")
test("(string<=? \"hello\" \"hell\")", "#f")
test("(string>=? \"hello\" \"hello\")", "#t")
test("(string>=? \"hello\" \"hellos\")", "#f")
test("(string/=? \"hello\" \"hello\")", "#f")
test("(string/=? \"hello\" \"heltlo\")", "#t")
test("(eq? 1 2)", "#f")
test("(eq? 1 \"1\")", "#f")
test("(eq? 1 1)", "#t")
test("(append '(1 2 3) '(4 5 6))", "(1 2 3 4 5 6)")
test("(append '() '(4 5 6))", "(4 5 6)")
test("(concat \"hello\" \" & goodbye\")", "\"hello & goodbye\"")
test("(escape \"<>\\\"algo en html\")", "\"&lt;&gt;&quot;algo en html\"")
test("(symbol? 1)", "#f")
test("(define x 'x) (symbol? x)", "#t")
test("(pair? '(1 2 3))", "#t")
test("(pair? 'x)", "#f")
test("(number? 1)", "#t")
test("(number? '(23))", "#f")
test("(number? (head '(34 5)))", "#t")
test("(boolean? #t)", "#t")
test("(boolean? #f)", "#t")
test("(boolean? 1)", "#f")
test("(symbol->string 'x)", "\"x\"")
test("(string->symbol \"x\")", "x")
test("(define x 3)", "3")
test("(if (< 3 2) (define x 3) (define x 2))", "2")
test("(cons \"Result: \" (+ 1 2 3 4 5 6))", "(\"Result: \" . 21)")
test("(cons \"The value of the cdr of this dotted list is 720: \"(* 1 2 3 4 5 6))", "(\"The value of the cdr of this dotted list is 720: \" . 720)")
